﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Sisocana.Core.Models;
using System.Linq.Expressions;

namespace Sisocana.Core.Interfaces
{
    public interface IPersonaService : IService<PersonaModel>
    {
        DataImagen GetPhoto(int id);

        // Persona Desaparecida  
        IList<PersonaDesaparecidaFullModel> GetSimilar(int siteId,string firstName, string lastName);
        int crearRegistroPersonaDesaparecida(PersonaDesaparecidaModel personaModel, DireccionModel direccionModel, ReporteModel reporteroModel);
        int agregarReportePersonaDesaparecida(int idSitio,ReporteModel reporteModel);
        //Persona Ayuda
        PersonaAyudaModel GetPersonaAyudaModel(int idPersona);
        IList<PersonaAyudaModel> GetAllPersonaAyudaModel(int idSitio);
        IList<PersonaAyudaModel> GetAllPersonaAyudaModel(Expression<Func<PersonaAyudaModel, bool>> whereCondition);
        int makeHelpRequest(PersonaAyudaModel persona);
        
        // Help requests widget
        PersonaAyudaModel LatestHelpRequests(int idSitio, int lastHelpRequestId);

        //Busqueda Personas Desaparecidas
        IList<PersonaDesaparecidaFullModel> SearchPersonAdvanced(int idSitio,string firstName, string lastName, string phone, DateTime from, DateTime to);
        IList<PersonaDesaparecidaModel> SearchPersonAdvancedLocal(string firstName, string lastName, string phone, DateTime from, DateTime to);
        IList<PersonaDesaparecidaModel> SearchPersonAdvancedLocal(int idSitio, string firstName, string lastName, string phone, DateTime from, DateTime to);

        IList<Models.PersonaDesaparecidaFullModel> SearchPersonByKeyword(int idSitio,string keyword);
        IList<Models.PersonaDesaparecidaModel> SearchPersonByKeywordLocal(string keyword);
        IList<Models.PersonaDesaparecidaModel> SearchPersonByKeywordLocal(int idSitio, string keyword);

        IList<PersonaDesaparecidaModel> SearchPersonACJSON(int idSitio, string q, int limit);

        PersonaDesaparecidaModel findPersonaDesaparecida(int idSitio, int id);

        DireccionModel findDireccion(int idSitio, int id);

        IList<ReporteModel> findReportes(int idSitio, int id);

    }
}
